package com.christina.engine.routing.manager;

import com.christina.engine.intent.model.Intent;
import com.christina.engine.processing.model.ProcessingContext;
import com.christina.engine.routing.model.RoutingDecision;
import com.christina.engine.routing.strategy.RoutingStrategy;
import java.util.List;

/**
 * 路由策略管理器接口
 * 负责路由策略的注册、选择和执行
 *
 * @author Christina
 */
public interface RoutingStrategyManager {
    
    /**
     * 注册路由策略
     *
     * @param strategy 路由策略实例
     */
    void registerStrategy(RoutingStrategy strategy);
    
    /**
     * 注销路由策略
     *
     * @param strategy 路由策略实例
     */
    void unregisterStrategy(RoutingStrategy strategy);
    
    /**
     * 获取所有已注册的策略
     *
     * @return 策略列表
     */
    List<RoutingStrategy> getRegisteredStrategies();
    
    /**
     * 根据意图和上下文选择最合适的路由策略
     *
     * @param intent 用户意图
     * @param context 处理上下文
     * @return 最适合的策略
     */
    RoutingStrategy selectStrategy(Intent intent, ProcessingContext context);
    
    /**
     * 执行路由决策
     *
     * @param intent 用户意图
     * @param context 处理上下文
     * @return 路由决策结果
     */
    RoutingDecision makeRoutingDecision(Intent intent, ProcessingContext context);
    
    /**
     * 根据优先级对策略进行排序
     */
    void sortStrategiesByPriority();
}